// pages/input/inputList.js
const defaultSettings = require('../../config/defaultSettings')
import {eqUrl,queryEqTypeByEqNo} from '../../api/eq'
import {queryRealTime} from '../../api/realTime'
import {save} from '../../api/eqRepair'
import Toast from '@vant/weapp/toast/toast';
import Notify from '@vant/weapp/notify/notify';
import {downlinkCommandValve,startIrrigation,stopIrrigation,downlinkCommandFertigation,downlinkCommandWaterSupply,downlinkCommandAgitation,downlinkCommandDesilting,downlinkCommandSettle} from '../../api/cmd'
Page({

  /**
   * 页面的初始数据
   */
  data: {
    eqUrl,
    defaultSettings,
    primaryColor:defaultSettings.primaryColor,
    globalData:getApp().globalData,
    emp:getApp().globalData.appInfo.emp,
    realTimeTimeout:null,
    eqDetail:{},
    valveRealTime:{},//所有阀门状态
    filterValveRealTime:{},//过滤后的阀门状态
    maxShowValveRealTimeCount:6,//最多显示阀门实时状态数量
    isShowCondition:false,
    active:0,
    repairDesc:null,//报修内容
    irrigationDuration:null,//灌溉时长
    fertilizationDuration:null,//施肥时长
    wateringLitre:null,//加水升
    stirringDuration:null,//搅拌时长
    paishaDuration:null,//排沙时长
    eqFunction:[],//设备拥有的功能
    eqRealTime:{},//设备实时信息
    eqStatus:{},
    valveStatus:{
      open:defaultSettings.constants.valveOpenImg,
      close:defaultSettings.constants.valveCloseImg,
    },
    eqOperateState:{
      //灌溉
      isGuangai:true,
      //是否点击搅拌
      isJiaoban:false,
      //是否点击加水
      isJiashui:false,
      //是否点击施肥
      isShifei:false,
      //排沙
      isPaisha:false

    },
    title:'',
    jiezhangInfo:"结账中...",
    jiezhangState:"1",
    eqLineState:'',

    //特殊处理的设备类型，目前是结束灌溉，就发起结账命令
    specialEq:[
      '1datianweishi'
    ],
    eqTypeInfo:{}
    

  },

  /**
   * 设备操作按钮点击改变
   */
  eqOperateChange(e){
    const type = e.mark.item
    for(let key in this.data.eqOperateState){
      if(key===type){
        this.setData({[`eqOperateState.${key}`]:true})
      }else{
        this.setData({[`eqOperateState.${key}`]:false})
      }
    }
    
  },
  /**
   * 判断是否有开启的阀门
   */
  valveIsOpen(){
    let flag = false
    for (const key in this.data.valveRealTime) {
      if(defaultSettings.constants.yes===this.data.valveRealTime[key].switchStatus){
        flag = true
        break
      }
    }
    return flag
  },

  /**
   * 判断阀门是否已经关闭
   */
  valveIsClose(){
    let flag = true
    for (const key in this.data.valveRealTime) {
      if(defaultSettings.constants.yes===this.data.valveRealTime[key].switchStatus){
        flag = false
        break
      }
    }
    return flag
  },

  /**
   * 开始，停止灌溉
   * @param {*} type 
   */
  onIrrigation(e){
   
    if(!this.checkEqIsOnLine()){
      Toast.fail('设备不在线');
      return
    }
    const type = e.mark.item
    let formData={eqNo:this.data.eqDetail.eqNo,icNo:this.data.emp.empIc,time:this.data.irrigationDuration,downlinkType:'0'}
    // console.log(formData)
    if(defaultSettings.constants.yes===type){
       //启动灌溉
      if(this.data.eqFunction.includes(defaultSettings.constants.eqFunction_famen) && !this.valveIsOpen()){
        // wx.showToast({icon:"none",title:'请先开启阀门'})
        Toast.fail('请先开启阀门');
        return
      }
      //判断当前是否在灌溉中
      if(this.data.eqRealTime.irrigationStatus && defaultSettings.constants.yes===this.data.eqRealTime.irrigationStatus){
        // wx.showToast({icon:"none",title:'设备已在灌溉中'})
        Toast.fail('设备已在灌溉中');
        return
      }
     
      if(!this.data.irrigationDuration){
        // wx.showToast({icon:"none",title:'请输入灌溉时长'})
        Toast.fail('请输入灌溉时长');
        return
      }
      wx.showLoading()
      startIrrigation(formData).then(res=>{
        if(res.success){
          // wx.showToast({icon:"success",title: "执行成功"})
          Toast.success('执行成功')

        }else{
          // wx.showToast({icon:"none",title: res.message})
          Toast.fail(res.message);
        }
      }).finally(err=>{
        wx.hideLoading()
      })
    }else{
      //关闭
      if (this.data.specialEq.includes(this.data.eqTypeInfo.typeCode)) {
        //如果是大田卫视，直接结账
        wx.hideLoading()
        this.onCheckOut()

      }else{
        stopIrrigation(formData).then(res=>{
          if(res.success){
            // wx.showToast({icon:"success",title: "执行成功"})
            Toast.success('执行成功')
          }else{
            // wx.showToast({icon:"none",title: res.message})
            Toast.fail(res.message);
          }
        }).finally(err=>{
          wx.hideLoading()
        })
      }
      
    }
  },
  /**
   * 施肥
   */
  onFertilization(e){
    if(!this.checkEqIsOnLine()){
      Toast.fail('设备不在线');
      return
    }
    const type = e.mark.item
    let formData={eqNo:this.data.eqDetail.eqNo,icNo:this.data.emp.empIc,isOpen:type,shifei:this.data.fertilizationDuration,downlinkType:'0'}
    // console.log(formData)
    if(defaultSettings.constants.yes===type){
      //判断是否在灌溉状态，只有在灌溉状态才能施肥
      if(!this.data.eqRealTime.irrigationStatus || defaultSettings.constants.no===this.data.eqRealTime.irrigationStatus){
        // wx.showToast({icon:"none",title:'请先启动灌溉'})
        Toast.fail('请先启动灌溉');
        return
      }

      if(!this.data.fertilizationDuration){
        // wx.showToast({icon:"none",title:'请输入施肥时长'})
        Toast.fail('请输入施肥时长');
        return
      }
    }
     //请求后台
     wx.showLoading()
     downlinkCommandFertigation(formData).then(res=>{
       if(res.success){
        //  wx.showToast({icon:"success",title: "执行成功"})
         Toast.success('执行成功');
       }else{
        //  wx.showToast({icon:"none",title: res.message})
         Toast.fail(res.message);
       }
     }).finally(err=>{
       wx.hideLoading()
     })
 
  },

  /**
   * 加水
   */
  onWatering(e){
    if(!this.checkEqIsOnLine()){
      Toast.fail('设备不在线');
      return
    }
    const type = e.mark.item
    let formData={eqNo:this.data.eqDetail.eqNo,icNo:this.data.emp.empIc,isOpen:type,jiashui:this.data.wateringLitre,downlinkType:'0'}
    // console.log(formData)
    if(defaultSettings.constants.yes===type){
      //判断是否在灌溉状态，只有在灌溉状态才能施肥
      if(!this.data.eqRealTime.irrigationStatus || defaultSettings.constants.no===this.data.eqRealTime.irrigationStatus){
        // wx.showToast({icon:"none",title:'请先启动灌溉'})
        Toast.fail('请先启动灌溉');
        return
      }

      if(!this.data.wateringLitre){
        // wx.showToast({icon:"none",title:'请输入加水量'})
        Toast.fail('请输入加水量');
        return
      }
    }

    //请求后台
    wx.showLoading()
    downlinkCommandWaterSupply(formData).then(res=>{
       if(res.success){
        //  wx.showToast({icon:"success",title: "执行成功"})
         Toast.success('执行成功');
       }else{
        //  wx.showToast({icon:"none",title: res.message})
         Toast.fail(res.message);
       }
     }).finally(err=>{
       wx.hideLoading()
     })
  },
  /**
   * 搅拌
   */
  onStirring(e){
    if(!this.checkEqIsOnLine()){
      Toast.fail('设备不在线');
      return
    }
    const type = e.mark.item
    let formData={eqNo:this.data.eqDetail.eqNo,icNo:this.data.emp.empIc,isOpen:type,jiaoban:this.data.stirringDuration,downlinkType:'0'}
    // console.log(formData)
    if(defaultSettings.constants.yes===type){
       //判断是否在灌溉状态，只有在灌溉状态才能施肥
      //  if(!this.data.eqRealTime.irrigationStatus || defaultSettings.constants.no===this.data.eqRealTime.irrigationStatus){
      //   Toast.fail('请先启动灌溉');
      //   return
      // }

      if(!this.data.stirringDuration){
        // wx.showToast({icon:"none",title:'请输入搅拌时长'})
        Toast.fail('请输入搅拌时长');
        return
      }
    }

    //请求后台
    wx.showLoading()
    downlinkCommandAgitation(formData).then(res=>{
       if(res.success){
        //  wx.showToast({icon:"success",title: "执行成功"})
         Toast.success('执行成功');
       }else{
        //  wx.showToast({icon:"none",title: res.message})
         Toast.success(res.message);
       }
     }).finally(err=>{
       wx.hideLoading()
     })
   
  },

  //排沙
  onPaisha(e){
    if(!this.checkEqIsOnLine()){
      Toast.fail('设备不在线');
      return
    }
    const type = e.mark.item
    let formData={eqNo:this.data.eqDetail.eqNo,icNo:this.data.emp.empIc,isOpen:type,paisha:this.data.paishaDuration,downlinkType:'0'}
    // console.log(formData)
    if(defaultSettings.constants.yes===type){
       //判断是否在灌溉状态，只有在灌溉状态才能施肥
      //  if(!this.data.eqRealTime.irrigationStatus || defaultSettings.constants.no===this.data.eqRealTime.irrigationStatus){
      //   Toast.fail('请先启动灌溉');
      //   return
      // }

      if(!this.data.paishaDuration){
        // wx.showToast({icon:"none",title:'请输入排沙时长'})
        Toast.fail('请输入排沙时长');
        return
      }
    }

    //请求后台
    wx.showLoading()
    downlinkCommandDesilting(formData).then(res=>{
       if(res.success){
        //  wx.showToast({icon:"success",title: "执行成功"})
         Toast.success('执行成功');
       }else{
        //  wx.showToast({icon:"none",title: res.message})
         Toast.fail(res.message);
       }
     }).finally(err=>{
       wx.hideLoading()
     })
  },

  /**
   * 查看更多阀门
   */
  onOpenMoreValve(){
    this.setData({isShowCondition:true})
  },
  onClose(){
    this.setData({isShowCondition:false})
  },
  /**
   * 阀门开关
   * @param {} e 
   */
  onValve(e){
    if(!this.checkEqIsOnLine()){
      Toast.fail('设备不在线');
      return
    }
    const serialNo = e.mark.item
    const isOpen = e.mark.isOpen
    let formData={eqNo:this.data.eqDetail.eqNo,icNo:this.data.emp.empIc,isOpen:isOpen,valveNo:serialNo,downlinkType:'0'}
    wx.showLoading()
    downlinkCommandValve(formData).then(res=>{
      if(res.success){
        // wx.showToast({icon:"success",title: "执行成功"})
        Toast.success('执行成功');
      }else{
        // wx.showToast({icon:"none",title: res.message})
        Toast.fail(res.message);
      }
    }).finally(err=>{
      wx.hideLoading()
    })
  },
  /**
   * 过滤阀门实时信息，最多显示12个
   */
  onfilterValveRealTime(){
    let realTime = {}
    if(Object.keys(this.data.valveRealTime).length>this.data.maxShowValveRealTimeCount){
      let count = 0;
      for (const key in this.data.valveRealTime) {
        if(count>=this.data.maxShowValveRealTimeCount){
          break
        }
        realTime[key]=this.data.valveRealTime[key]
        count++;
      }
    }else{
      realTime = this.data.valveRealTime
    }
    this.setData({filterValveRealTime:realTime})
  },
  //结账
  onCheckOut(){
    if(!this.checkEqIsOnLine()){
      Toast.fail('设备不在线');
      return
    }
    // if(this.data.jiezhangState!=="1"){
    //   Toast.fail('不能重复结账');
    //   return
    // }
    let that = this
    wx.showModal({
      title: '提示',
      content: '确定结束灌溉并结账？',
      success (res) {
        
        if (res.confirm) {
          //调用后台
          let formData={eqNo:that.data.eqDetail.eqNo,icNo:that.data.emp.empIc,downlinkType:'0'}
          downlinkCommandSettle(formData).then(res=>{
            if(res.success){
              //将原来定时器停掉
              if (that.data.realTimeTimeout) {
                clearTimeout(that.data.realTimeTimeout)
              }
              Notify({
                message: '结账中...',
                color: '#ffffff',
                background: '#818182',
              });
              //结账中
              that.data.jiezhangState = "2"
              //2秒后查询实时信息
              setTimeout(() => {
                that.queryRealTime(that.data.eqDetail)
              }, 2000)

             }else{
               Toast.fail(res.message);
             }
          })
          
        } else if (res.cancel) {
          console.log('用户点击取消')
        }
      }
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    
    let eq = wx.getStorageSync('eqItem')
    // console.log(eq)
    wx.setNavigationBarTitle({
      title: "设备详情",
    })
    this.setData({eqDetail:eq})
    this.queryRealTime(this.data.eqDetail)
    this.queryEqTypeByEqNo()
    // console.log(this.data.eqFunction.includes("1"))
    // console.log(this.data.valveRealTime)
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    
  },
  /**
   * 根据设备编号获得设备功能
   */
  queryEqTypeByEqNo(){
    queryEqTypeByEqNo({eqNo:this.data.eqDetail.eqNo}).then(res=>{
      // console.log(res);
      if(res.success){
        this.setData({eqTypeInfo:res.result})
        if(res.result && res.result.eqFunction){
          this.setData({eqFunction:res.result.eqFunction.split(",")})
        }else{
          this.setData({eqFunction:[]})
        }
      }else{
        wx.showToast({icon:"none",title: res.message})
      }
    })
  },
  queryRealTime(eq){
    // console.log(eq)
    let that = this
    if (that.data.realTimeTimeout) {
      clearTimeout(that.data.realTimeTimeout)
    }
    queryRealTime(eq).then((res=>{
      // console.log(res)
      if(res.success){
        this.setData({"eqRealTime":res.result.eqRealTime})
        // console.log(this.data.eqRealTime)
        this.setData({"valveRealTime": res.result.valveRealTime||[]})
        this.onfilterValveRealTime()
        let eqLineState = "设备:"+eq.eqNo+(this.data.eqRealTime.onlineStatus===defaultSettings.constants.yes?'  在线':'  离线')
        // this.setTitle(title)
        this.setData({eqLineState:eqLineState})

        // console.log(this.data.eqRealTime)
        if(that.data.jiezhangState==="2"){
          Notify({ type: 'success', message:  `当前卡余额：${res.result.eqRealTime['curMoney'] || '未知'} \r\n当前取水量：${res.result.eqRealTime['curWater'] || '未知'} \r\n当前用电量：${res.result.eqRealTime['curEle'] || '未知'}` });
          //结账完毕
          that.data.jiezhangState = "1"
        }
        
      }
    })).finally(()=>{
      that.data.realTimeTimeout = setTimeout(() => {
        that.queryRealTime(eq)
      }, 5000)
    })
    
  },

  /**
   * 判断是否在线
   */
  checkEqIsOnLine(){
    return this.data.eqRealTime.onlineStatus===defaultSettings.constants.yes
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    if(this.data.realTimeTimeout===null){
      this.queryRealTime(this.data.eqDetail)
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    if (this.data.realTimeTimeout) {
      clearTimeout(this.data.realTimeTimeout)
      this.data.realTimeTimeout=null
    }
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    let that = this
    if (that.data.realTimeTimeout) {
      clearTimeout(that.data.realTimeTimeout)
    }
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})